package org.cg.entidade;

import java.util.UUID;

import org.cg.entidade.estado.IEstado;

public abstract class Entidade implements Comparable<Entidade> {
	
	protected IEstado estadoActual;
	private UUID id = UUID.randomUUID();
	
	public IEstado getEstadoActual() {
		return estadoActual;
	}
	
	public UUID getID() {
		return this.id;
	}
	
	public void mudarEstado(IEstado estadoNovo) {
		estadoActual = estadoNovo;
		estadoActual.update(this);
	}
	
	public abstract void log();

	public void update() {
		estadoActual.update(this);
	}

	public int compareTo(Entidade entidade) {
		int compare = 0;
				
		if (this instanceof Coelho && entidade instanceof Cenoura
				|| entidade instanceof Prado
				|| entidade instanceof Cenoura && this instanceof Cenoura
				|| entidade instanceof Coelho && this instanceof Coelho) {
			compare = 1;
		}
				
		if (this instanceof Cenoura && entidade instanceof Coelho
				|| this instanceof Prado) {
			compare = -1;
		}
				
		return compare;
	}
}
